﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Collections;
using Proxy;
using System.Text;
using log4net;
using log4net.Config;
using log4net.Core;
using SIM.Util;
namespace SIM.Geo.UI.GeoMant
{
    public partial class frmMantJunta : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.txtCodigo.Enabled = false;
                Listar();
            }
        }

        protected override void Listar()
        {
            try
            {
                using (var proxy = new SETipoJuntaClient("BasicHttpBinding_ISETipoJunta"))
                {
                    var lista = proxy.Listar();
                    this.rgLista.DataSource = lista;
                    
                    this.rgLista.DataBind();
                }
                
            }
            catch (Exception ex)
            {

                Logger.Error("TipoJunta:Listar", ex);

            }
        }

        protected void rgLista_DeleteCommand(object sender, GridCommandEventArgs e)
        {
            try
            {
                int codigoTipoJunta = int.Parse(((GridDataItem)e.Item).GetDataKeyValue("CodigoTipoJunta").ToString());
                try
                {
                    using (var proxy = new SETipoJuntaClient("BasicHttpBinding_ISETipoJunta"))
                    {
                        proxy.Eliminar(codigoTipoJunta);
                    }
                }
                catch (Exception ex)
                {
                    MostrarMensaje(MSG_ERROR_ELIMINAR, enmTipoMensajeMostrar.Error);
                    Logger.Error("TipoJunta:rgLista_DeleteCommand", ex);
                }
                Listar();
                MostrarMensaje(MSG_OK_ELIMINAR);
            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_GENERICO, enmTipoMensajeMostrar.Error);
                Logger.Error("TipoJunta:rgLista_DeleteCommand", ex);
            }
        }

        protected override void Limpiar()
        {
            this.txtCodigo.Text = string.Empty;
            this.txtDescripcion.Text = string.Empty;

            OcultarMensaje();
            OcultarMensajeValidacion();
        }

        private void CargarDatos(int codigoTipoJunta)
        {
            try
            {
                using (var proxy = new SETipoJuntaClient("BasicHttpBinding_ISETipoJunta"))
                {
                    var item = proxy.Obtener(codigoTipoJunta);
                    if (item != null)
                    {
                        this.hidCodigo.Value = item.CodigoTipoJunta.ToString();
                        this.txtCodigo.Text = item.CodigoTipoJunta.ToString();
                        this.txtDescripcion.Text = item.Descripcion.ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("TipoJunta:CargarDatos", ex);
            }
        }

        protected void rgLista_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName.CompareTo("Editar") == 0)
            {
                var item = ((GridEditableItem)e.Item);
                int codigoTipoJunta = int.Parse(item.GetDataKeyValue("CodigoTipoJunta").ToString());
                CargarDatos(codigoTipoJunta);
                this.pnlMensajeValidacion.Visible = false;
                this.mpRegistro.Show();
            }
            if (e.CommandName == RadGrid.FilterCommandName)
            {
                Listar();
            }
        }

        protected void btnClose_Click(object sender, EventArgs e)
        {
            this.mpRegistro.Hide();
        }

        protected void imgClose_Click(object sender, ImageClickEventArgs e)
        {
            this.mpRegistro.Hide();
        }

        protected void rgLista_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            Listar();
        }

        protected void rgLista_SortCommand(object sender, GridSortCommandEventArgs e)
        {
            Listar();
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            this.Listar();
        }

        protected void ibtnExportar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Listar();
                string alternateText = "ExcelML";
                rgLista.ExportSettings.Excel.Format = (GridExcelExportFormat)Enum.Parse(typeof(GridExcelExportFormat), alternateText);
                rgLista.ExportSettings.IgnorePaging = true;
                rgLista.ExportSettings.ExportOnlyData = true;
                rgLista.ExportSettings.OpenInNewWindow = true;
                rgLista.MasterTableView.ExportToExcel();
            }
            catch (Exception ex)
            {

                Logger.Error("TipoJunta:ibtnExportar_Click", ex);
            }
        }

        protected void ibtnRegistrar_Click(object sender, ImageClickEventArgs e)
        {
            Limpiar();
            using (var proxy = new SETipoJuntaClient())
            {
                int UltimoCodigo = proxy.Listar().Max(x => x.CodigoTipoJunta);
                this.txtCodigo.Text = Convert.ToString(UltimoCodigo + 1);
                this.txtCodigo.Enabled = true;
            }

            this.pnlMensajeValidacion.Visible = false;
            this.hidCodigo.Value = "0";
            this.mpRegistro.Show();
        }

        protected void ibtnGuardar_Click(object sender, ImageClickEventArgs e)
        {
            this.Guardar();
        }

        protected void ibtnCancelar_Click(object sender, ImageClickEventArgs e)
        {
            this.mpRegistro.Hide();
        }




        protected override bool Validar(ref  StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                //valida el nombre ingresado ya existe, si solo es nuevo
                if (this.hidCodigo.Value.CompareTo("0") == 0)
                {
                    using (SETipoJuntaClient proxy = new SETipoJuntaClient("BasicHttpBinding_ISETipoJunta"))
                    {
                        var lista = proxy.Listar().Where(x => x.Descripcion == this.txtDescripcion.Text.Trim()).FirstOrDefault();
                        if (lista != null)
                        {
                            sb.AppendLine("El nombre del Tipo Junta " + " " + this.txtDescripcion.Text.Trim() + " ya existe");
                            retorno = false;
                        }
                    }
                }
                else
                {
                    using (SETipoJuntaClient proxy = new SETipoJuntaClient("BasicHttpBinding_ISETipoJunta"))
                    {
                        var lista = proxy.Listar().Where(x => x.Descripcion == this.txtDescripcion.Text.Trim() && (x.CodigoTipoJunta != Convert.ToInt32(hidCodigo.Value))).FirstOrDefault();
                        if (lista != null)
                        {
                            sb.AppendLine("El nombre del Tipo Junta " + " " + this.txtDescripcion.Text.Trim() + " ya existe");
                            retorno = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                retorno = false;
                Logger.Error("TipoJunta:Validar", ex);
            }
            return retorno;
        }

        protected override void Guardar()
        {
            try
            {
                //Se valida antes de grabar
                StringBuilder sb = new StringBuilder();
                if (!Validar(ref sb))
                {
                    MostrarMensajeValidacion(sb.ToString());
                    return;
                }
                TipoJunta junta = new TipoJunta();
                junta.CodigoTipoJunta = Convert.ToInt32(this.txtCodigo.Text.Trim());
                junta.Descripcion = this.txtDescripcion.Text.Trim();


                using (SETipoJuntaClient proxy = new SETipoJuntaClient("BasicHttpBinding_ISETipoJunta"))
                {

                    if (this.hidCodigo.Value.CompareTo("0") == 0)
                    {

                        int UltimoCodigo = proxy.Listar().Max(x => x.CodigoTipoJunta);
                        junta.CodigoTipoJunta = UltimoCodigo + 1;
                        proxy.Insertar(junta);
                    }
                    else
                        proxy.Modificar(junta);
                }

                MostrarMensaje(MSG_OK_GRABAR);
                Listar();

                this.mpRegistro.Hide();
            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_GRABAR);
                Logger.Error("TipoJunta:Guardar", ex);
            }
        }


        protected override void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            this.pnlMensaje.Visible = true;
            this.lblMensaje.Text = mensaje;
            if (tipoMensaje == enmTipoMensajeMostrar.Error)
                this.pnlMensaje.CssClass = "alert alert-danger";

            if (tipoMensaje == enmTipoMensajeMostrar.Informativa)
                this.pnlMensaje.CssClass = "alert alert-success";

            if (tipoMensaje == enmTipoMensajeMostrar.Advertencia)
                this.pnlMensaje.CssClass = "alert alert-warning alert-dismissable";

        }

        protected override void OcultarMensaje()
        {
            this.pnlMensaje.Visible = false;
            this.lblMensaje.Text = string.Empty;
        }

        protected override void MostrarMensajeValidacion(string mensaje)
        {
            this.pnlMensajeValidacion.Visible = true;
            this.lblMensajeValidacion.Text = mensaje;
        }

        protected override void OcultarMensajeValidacion()
        {
            this.pnlMensajeValidacion.Visible = false;
            this.lblMensajeValidacion.Text = string.Empty;
        }

        protected void rgLista_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
        {
            Listar();
        }

    }
}